#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());
    int val = 100;

    // 创建子进程
    /**
     * 创建成功后，系统会依次执行父进程和子进程， 只是谁先执行不是固定的
     * 无论执行父进程还是子进程，都是继续向下执行，只是fork函数返回值不同
     *      返回0：代表在执行子进程
     *      返回大于0：代表在执行父进程，返回值是子进程的pid    
     * fork函数执行返回2次，一次是执行父进程，一次是执行子进程
     */
    pid_t pid = fork();
    if (pid < 0)
    {
        printf("创建子进程失败 \n");
        return -1;
    } else if (pid == 0) // 子进程
    {
        val++;
        printf("子进程(%d)开始执行， 父进程id=%d, val=%d, val地址=%p\n", getpid(), 
        getppid(), val, &val);
    } else { // 父进程
        val--;
        printf("父进程(%d)继续执行， 子进程id=%d,value=%d, val地址=%p \n", getpid(),
        pid, val, &val);
    }

    printf("进程(%d)结束执行 \n", getpid());
    return 0;
}
